/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.LaboratorioMedicamentoFisica;
import hibernate.objeto.LaboratorioMedicamento;
import java.util.Vector;

/**
 *
 * @author Gonzalo
 */
public class LaboratorioMedicamentoLogica extends CapaLogica {

    /**
     * Crea y persiste el laboratorio del medicamento.
     *
     * @param datosMedicamento Los datos del laboratorio
     * @param idLaboratorioMedicamento El id del objeto
     * creada para su posterior recuperación
     * @param idLaboratorioMedicamento  El id del objeto
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static boolean agregarOModificarLaboratorioMedicamento(
            Object[] datosMedicamento, int[] idLaboratorioMedicamento) {
        //Crea el objeto
        LaboratorioMedicamento laboratorioMedicamento =
                crearUObtenerObjetoLaboratorioMedicamento(datosMedicamento);

        //Persiste el objeto
        if (CapaFisica.guardarOActualizarObjeto(laboratorioMedicamento)) {
            idLaboratorioMedicamento[0] = laboratorioMedicamento
                    .getIdLaboratorioMedicamento();
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto Laboratorio y si existe se lo trae de la base de datos.
     * 
     * @return El objeto creado u obtenido
     */
    private static LaboratorioMedicamento crearUObtenerObjetoLaboratorioMedicamento(
            Object [] datosMedicamento) {
        LaboratorioMedicamento retorno =
                getLaboratorioMedicamentoPorNombreYEnBd(datosMedicamento[
                    CapaLogica
                    .MEDICAMENTO_LABORATORIO].toString());
        
        if (retorno == null) {
            retorno = new LaboratorioMedicamento();
            retorno.setNombreLaboratorioMedicamento(datosMedicamento[
                    CapaLogica
                    .MEDICAMENTO_LABORATORIO].toString());
            retorno.setEnBdLaboratorioMedicamento(true);
        }
        
        return retorno;
    }

    /**
     * Retorna el vector de objetos LaboratorioMedicamento según el nombre del
     * laboratorio.
     *
     * @param nombreLaboratorio El nombre del laboratorio
     * @return El vector de objetos LaboratorioMedicamento consultado, null si
     * no existe
     */
    public static Vector<LaboratorioMedicamento>
            getVectorLaboratorioMedicamentoPorNombreYEnBd(String laboratorio){
        return LaboratorioMedicamentoFisica.
                getVectorLaboratorioMedicamentoPorNombreYEnBd(
                reemplazarUnApostrofoPorDosApostrofos(laboratorio), true);
    }

    /**
     * Retorna el objeto LaboratorioMedicamento según el nombre del laboratorio.
     *
     * @param nombreLaboratorio Elnombre del laboratorio
     * @return El objeto LaboratorioMedicamento consultado, null si no existe
     */
    public static LaboratorioMedicamento getLaboratorioMedicamentoPorNombreYEnBd(
            String laboratorio) {
        return LaboratorioMedicamentoFisica
                .getLaboratorioMedicamentoPorNombreYEnBd(
                reemplazarUnApostrofoPorDosApostrofos(laboratorio), true);
    }

    /**
     * Retorna el objeto LaboratorioMedicamento según el id.
     *
     * @param idLaboratorioMedicamento El id del laboratorio del
      * medicamento
     * @return El objeto LaboratorioMedicamento consultado, null si no existe
     */
    public static LaboratorioMedicamento getLaboratorioMedicamentoPorId(
            int idLaboratorioMedicamento) {
        return LaboratorioMedicamentoFisica.getLaboratorioMedicamentoPorId(
                idLaboratorioMedicamento);
    }

}
